<?php

/**
 * Enseignant
 */
class Enseignant extends CI_Model
{
	const TABLE_ENSEIGNANT	= 'enseignant';
	const LOGIN_ENSEIGNANT	= 'LoginE';
	const NOM_ENSEIGNANT	= 'NomE';
	const PRENOM_ENSEIGNANT	= 'PrenomE';
	const MAIL_ENSEIGNANT	= 'MailE';
	
    /**
     * @var string
     */
    private $login;

    /**
     * @var string
     */
    private $nom;

    /**
     * @var string
     */
    private $prenom;

    /**
     * @var string
     */
    private $mail;
    
    public function __construct()
    {
    	parent::__construct();
    }
    
    /**
     * Fonctions permettant de trouver tous les enseignants
     * @return array Un tableau d'actions de communication.
     */
    public static function findAll($where = null)
    {
    	$CI = get_instance();
    
    	$CI->load->database('db_adc', true);
    	 
    	if($where == null)
    		$resultat = $CI->db	->select(self::LOGIN_ENSEIGNANT.','.self::NOM_ENSEIGNANT.','.self::PRENOM_ENSEIGNANT.','.self::MAIL_ENSEIGNANT)
					    		->from(self::TABLE_ENSEIGNANT)
					    		->get()
					    		->result_array();
    	elseif ($where != null)
	    	$resultat = $CI->db	->select(self::LOGIN_ENSEIGNANT.','.self::NOM_ENSEIGNANT.','.self::PRENOM_ENSEIGNANT.','.self::MAIL_ENSEIGNANT)
					    		->from(self::TABLE_ENSEIGNANT)
						    	->where($where)
						    	->get()
						    	->result_array();
    	 
    	$enseignants = array();
    	 
    	if(!empty($resultat))
    	{
    		foreach($resultat as $r)
    		{
    			$enseignant = new Enseignant();
    			$enseignant->setLogin($r[self::LOGIN_ENSEIGNANT]);
    			$enseignant->setNom($r[self::NOM_ENSEIGNANT]);
    			$enseignant->setPrenom($r[self::PRENOM_ENSEIGNANT]);
    			$enseignant->setMail($r[self::MAIL_ENSEIGNANT]);
    			 
    			$enseignants[] = $enseignant;
    		}
    	}
    	return $enseignants;
    }
    
    /**
     * Fonction permettant de récupérer un enseignant en fonction de son login
     * @param String $login login de l'enseignant
     * @return Enseignant $enseignant un enseignant
     */
    public static function findByLogin($login)
    {
    	$CI = get_instance();
    	 
    	$CI->load->database('db_adc', true);
    	 
    	$resultat = $CI->db	->select(self::LOGIN_ENSEIGNANT.','.self::NOM_ENSEIGNANT.','.self::PRENOM_ENSEIGNANT.','.self::MAIL_ENSEIGNANT)
					    	->from(self::TABLE_ENSEIGNANT)
					    	->where(self::LOGIN_ENSEIGNANT, $login)
					    	->limit(1)
					    	->get()
					    	->result_array();
    	 
    	if(!empty($resultat))
    	{
    		$enseignant = new Enseignant();
    		$enseignant->setLogin($resultat[0][self::LOGIN_ENSEIGNANT]);
    		$enseignant->setNom($resultat[0][self::NOM_ENSEIGNANT]);
    		$enseignant->setPrenom($resultat[0][self::PRENOM_ENSEIGNANT]);
    		$enseignant->setMail($resultat[0][self::MAIL_ENSEIGNANT]);
   
    		return $enseignant;
    	}
    	return false;
    }
    
    /**
     * Fonction permettant d'ajouter un enseignant
     * @param string $login login de l'enseignant
     * @param string $nom nom de l'enseignant
     * @param string $prenom prenom de l'enseignant
     * @param string $mail mail de l'enseignant
     * @return true ou false
     */
    public static function addEnseignant($login, $nom, $prenom, $mail)
    {
    	$CI = get_instance();
    
    	$CI->load->database('db_adc', true);
    	 
    	$CI->db->set(self::LOGIN_ENSEIGNANT, $login);
    	$CI->db->set(self::NOM_ENSEIGNANT, $nom);
    	$CI->db->set(self::PRENOM_ENSEIGNANT, $prenom);
    	$CI->db->set(self::MAIL_ENSEIGNANT, $mail);
    	 
    	return $CI->db->insert(self::TABLE_ENSEIGNANT);
    }
    
    /**
     * Fonction permettant de modifier un enseignant
     * @param string $login login de l'enseignant
     * @param string $nom nom de l'enseignant
     * @param string $prenom prenom de l'enseignant
     * @param string $mail mail de l'enseignant
     * @return true ou false
     */
    public static function modifyEnseignant($login, $nom, $prenom, $mail)
    {
    	$CI = get_instance();
    	 
    	$CI->load->database('db_adc', true);
    
    	$CI->db->set(self::NOM_ENSEIGNANT, $nom);
    	$CI->db->set(self::PRENOM_ENSEIGNANT, $prenom);
    	$CI->db->set(self::MAIL_ENSEIGNANT, $mail);
    	 
    	$CI->db->where(self::LOGIN_ENSEIGNANT, $login);
    
    	return $CI->db->update(self::TABLE_ENSEIGNANT);
    }
    
    /**
     * Fonction permettant de supprimer un enseignant
     * @param string $login login de l'enseignant
     * @return true ou false
     */
    public static function delEnseignant($login)
    {
    	$CI = get_instance();
    
    	$CI->load->database('db_adc', true);
    	
    	$CI->db->set(ActionDeCommunication::LOGIN_ENSEIGNANT_ADC, null);
    	$CI->db->where(ActionDeCommunication::LOGIN_ENSEIGNANT_ADC, $login);
    	$CI->db->update(ActionDeCommunication::TABLE_ADC);
    	
    	$CI->db->set(Forum::LOGIN_ENSEIGNANT_FORUM, null);
    	$CI->db->where(Forum::LOGIN_ENSEIGNANT_FORUM, $login);
    	$CI->db->update(Forum::TABLE_FORUM);
    	 
    	return $CI->db->where(self::LOGIN_ENSEIGNANT, $login)
    				->delete(self::TABLE_ENSEIGNANT);
    }
    
    /**
     * Permet de vérifier le formulaire de modification et de création d'un enseignant
     * @param String $login login de l'enseignant
     * @param String $nom nom de l'enseignant
     * @param String $prenom prenom de l'enseignant
     * @param String $mail mail de l'enseignant
     * @return boolean
     */
    public static function check($login, $nom, $prenom, $mail, $modif = false)
    {
    	$message = '';
    	$retour = true;
    	
    	if($login == null || $login == ' ')
    	{
    		$message .= '<br>Le login doit être renseigné.';
    		$retour = false;
    	}
    	elseif(!verif($login, 'string'))
    	{
    		$message .= '<br>Le login contient des caractères incorrects.';
    		$retour = false;
    	}
    	else
    	{
    		$enseignants = Enseignant::findAll();
    		$enseignantOk = false;
    		foreach($enseignants as $ens)
    		{
    			if($ens->getLogin() == $login && !$modif)
    			{
    				$message .= "<br>Le login de l'enseignant existe déjà.";
    				$retour = false;
    			}
    			else if($ens->getLogin() == $login)
    					$enseignantOk = true;
    		}
    		if(!$enseignantOk && $modif)
    		{
    			$message .= "<br>Login de l'enseignant incorrect.";
    			$retour = false;
    		}
    	}
    	if($nom == null || $nom == ' ')
    	{
    		$message .= '<br>Le nom doit être renseigné.';
    		$retour = false;
    	}
    	if($prenom == null || $prenom == ' ')
    	{
    		$message .= '<br>Le prenom doit être renseigné.';
    		$retour = false;
    	}
    	if($mail == null || $mail == ' ')
    	{
    		$message .= '<br>Le mail doit être renseigné.';
    		$retour = false;
    	}
    	elseif(!verif($mail, 'mail'))
    	{
    		$message .= '<br>Le mail doit être de la forme exemple@domaine.fr .';
    		$retour = false;
    	}
    	$CI =& get_instance();
    	$CI->session->set_flashdata('message', $message);
    	return $retour;
    }
    

    /**
     * Set login
     *
     * @param string $login
     * @return Enseignant
     */
    public function setLogin($login)
    {
        $this->login = $login;
    }

    /**
     * Get login
     *
     * @return string 
     */
    public function getLogin()
    {
        return $this->login;
    }

    /**
     * Set nom
     *
     * @param string $nom
     * @return Enseignant
     */
    public function setNom($nom)
    {
        $this->nom = $nom;
    }

    /**
     * Get nom
     *
     * @return string 
     */
    public function getNom()
    {
        return $this->nom;
    }

    /**
     * Set prenom
     *
     * @param string $prenom
     * @return Enseignant
     */
    public function setPrenom($prenom)
    {
        $this->prenom = $prenom;
    }

    /**
     * Get prenom
     *
     * @return string 
     */
    public function getPrenom()
    {
        return $this->prenom;
    }

    /**
     * Set mail
     *
     * @param string $mail
     * @return Enseignant
     */
    public function setMail($mail)
    {
        $this->mail = $mail;
    }

    /**
     * Get mail
     *
     * @return string 
     */
    public function getMail()
    {
        return $this->mail;
    }
}
